import { Request, Response } from "express";
import BorrowServer from "../server/BorrowServer";
import BookServer from "../server/BookServer";
import ReaderServer from "../server/ReaderServer";

class BorrowController {
  
  // 添加借阅记录（其实就是借书）
  async addBorrow(req: Request, res: Response) {
    const form = req.body;
    if (Object.keys(form).length < 5) return res.error('缺少必填参数！');
    // 先查找读者已经借了几本书，再查找该读者信息，如果读者的借阅数量等于读者的最大可借数，则返回失败提示
    const count = await BorrowServer.findReaderIdCount(form.reader_id);
    const reader = await ReaderServer.findById(form.reader_id);
    if (reader.max_num === count) return res.error('借阅失败，该读者最大可借数已满！')
    // 再查找图书，如果图书的库存不足，则返回失败提示
    const book = await BookServer.findBookById(form.book_id)
    if (book.stock === 0) return res.error('借阅失败，该图书库存不足！');
    // 添加一条借阅记录
    await BorrowServer.addBorrow(form);
    // 图书数量减 1
    await BookServer.bookStockDecrement(form.book_id);
    res.successMsg('借阅图书成功！')
  }

  // 修改借阅记录中的 if_back 为 "is" （其实就是还书）
  async updateBorrow(req: Request, res: Response) {
    const form = req.body;
    if (!form.reader_id || !form.book_id) return res.error('缺少必填参数');
    const result = await BorrowServer.updateBorrow(form.reader_id, form.book_id);
    if (!result) return res.error('该读者已还清本图书！')
    
    // 图书库存数量加 1
    await BookServer.bookStockIncrement(form.book_id);
    res.successMsg('归还图书成功！');
  }

  // 根据图书 id，在借阅记录中，查找该图书是否存在未归还
  async getBookNoBorrow(req: Request, res: Response) {
    const result = await BorrowServer.findBookNoBorrow(req.params.bookid);
    res.success(result);
  }

  // 获取所有借阅记录
  async getBorrows(req: Request, res: Response) {
    const borrows = await BorrowServer.findBorrows();
    res.success(borrows);
  }

  // 根据图书编号获取借阅记录
  async getBorrowByBookId(req: Request, res: Response) {
    const borrows = await BorrowServer.findBorrowByBookId(req.params.bookid);
    res.success(borrows);
  }

  // 根据读者编号获取借阅记录
  async getBorrowByReaderId(req: Request, res: Response) {
    const borrows = await BorrowServer.findBorrowByReaderId(req.params.readerid);
    res.success(borrows);
  }

  // 根据 id 删除借阅记录
  async deleteBorrowById(req: Request, res: Response) {
    await BorrowServer.deleteBorrowByid(req.params.id);
    res.successMsg('删除借阅记录成功！');
  }

  // 清空借阅历史
  async clearBorrows(req: Request, res: Response) {
    await BorrowServer.clearBorrows();
    res.successMsg('清空借阅记录成功！');
  }

  // 获取读者借阅了多少本图书（只需要在借阅表中根据 id 查找读者，并且是未归还的数据）
  async getReaderBorrowCount(req: Request, res: Response) {
    const form = req.body;
    if (!form.reader_id) return res.error('缺少必填参数');
    const count = await BorrowServer.findReaderIdCount(form.reader_id);
    res.success(count)
  }

  // 获取读者已借当前图书的数量
  async getReaderBorrowNowCount(req: Request, res: Response) {
    const form = req.body;
    if (!form.book_id || !form.reader_id) return res.error('缺少必填参数！')
    const result = await BorrowServer.findReaderBorrowNowCount(form.reader_id, form.book_id);
    res.success(result)
  }
}

export default new BorrowController();